package ljl.alg.wangzheng_camp.round1.veryveryeasy;

public class _offer_58_1_reverse_words {
    
    /**
     * 一般是 replace 空格，然后 split，然后双指针，然后 concat
     * 我不
     *
     * 如果用 trim 就不用写这么长了
     *
     * 算了就这吧
     * 算了，我还是写写 trim 版的吧
     * */
    public String reverseWords2(String s) {
        int j = s.length() - 1, i = j;
        StringBuilder sb = new StringBuilder();
        while (i >= 0) {
            // j 倒着找到第一个非空格作为 end
            while (j >= 0 && s.charAt(j) == ' ') j--;
            // 如果找到非空格，继续，否则退出
            if (j >= 0) i = j;
            else break;
            // i 从 j 往前找，找到第一个空格，作为头，可能找不到空格，那它就是头
            while (i >= 0 && s.charAt(i) != ' ') i--;
            int start = i >= 0 ? i + 1 : 0;
            sb.append(s, start, j + 1).append(' ');
            j = i;
        }
        if (sb.length() > 0)
            sb.deleteCharAt(sb.length() - 1);
        return sb.toString();
    }
    
    /**
     * 我说实话这个东西它没那么简单
     * */
    public String reverseWords_use_trim(String s) {
        s = s.trim();
        int j = s.length() - 1, i = j;
        StringBuilder sb = new StringBuilder(s.length());
        while (i >= 0) {
            while (i >= 0 && s.charAt(i) != ' ') i--;
            sb.append(s, i + 1, j + 1).append(' ');
            while (i >= 0 && s.charAt(i) == ' ') i--;
            j = i;
        }
        return sb.toString().trim();
    }
}
